﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace Sociedad.DAL
{
    public class SociedadDAL
    {
        EntityConnectionSOA context = new EntityConnectionSOA();

        public Soa_Sociedad Obtener_Sociedad(String pCodigo)
        {
            var beSoc = from soc in context.Soa_Sociedad
                        where soc.csoc_codigo == pCodigo
                        select soc; 
            return (Soa_Sociedad)beSoc.First();
        }

        public String Verificar_SociedadxRUC(String pRUC)
        {
            String cRpta = "";
            try
            {
                var beSoc = from soc in context.Soa_Sociedad
                            where soc.csoc_RUC == pRUC
                            select soc;
                if (beSoc.Count() > 0)
                {
                    cRpta = "Sociedad con RUC " + pRUC + " ya se encuentra registrado. Solo la SOA puede actualizar y renovar su información.";
                }
                else
                {
                    var beSocReg = from soc in context.soa_SolicitudInscripcion
                                   where soc.csin_RUC == pRUC && soc.csin_FlgEli == "N"
                                   select soc;
                    if (beSocReg.Count() > 0)
                    {
                        cRpta = "Existe una Solicitud [" + beSocReg.First().csin_Codigo + "] en trámite para el registro de la Sociedad que intenta registra. Verificar antes de continuar.";
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return cRpta;
        }

        public Soa_Sociedad_Registro Obtener_UltimoRegistroPendiente(String pCodSoa)
        {
            Soa_Sociedad_Registro beReg = new Soa_Sociedad_Registro();
            var beSoc = from soc in context.Soa_Sociedad_Registro
                        where soc.csoc_codigo == pCodSoa
                        orderby soc.csoc_nroreg descending
                        select soc;
            if (beSoc.Count() == 0)
                beReg = null;
            else
                beReg = (Soa_Sociedad_Registro)beSoc.First();
            return beReg;
        }

        public String Insertar_SociedadRegistro(Soa_Sociedad_Registro oSoc)
        {
            String cRpta = "0@";
            try
            {
                var parameters = new[] { 
                new SqlParameter("@0", oSoc.csoc_codigo), 
                new SqlParameter("@1", oSoc.csoc_Domicilio), 
                new SqlParameter("@2", oSoc.csoc_NumFicha ), 
                new SqlParameter("@3", oSoc.dsoc_FecInscripcion), 
                new SqlParameter("@4", oSoc.dsoc_FecIniOperacion), 
                new SqlParameter("@5", oSoc.nsoc_MonCapitalInicial), 
                new SqlParameter("@6", oSoc.csoc_Email), 
                new SqlParameter("@7", oSoc.csoc_PaginaWeb ), 
                new SqlParameter("@8", oSoc.csoc_Telefonos), 
                new SqlParameter("@9", oSoc.csoc_Fax), 
                new SqlParameter("@10", oSoc.nsoc_MonAutovaluo), 
                new SqlParameter("@11", oSoc.cprm_TipDomicilio), 
                new SqlParameter("@12", oSoc.cdis_CodDom), 
                new SqlParameter("@13", oSoc.cpro_CodDom ), 
                new SqlParameter("@14", oSoc.cdep_CodDom), 
                new SqlParameter("@15", oSoc.cpro_CodCons), 
                new SqlParameter("@16", oSoc.cdep_CodCons), 
                new SqlParameter("@17", oSoc.csoc_usucre), 
                new SqlParameter("@18", oSoc.csoc_usumod), 
                new SqlParameter("@19", oSoc.cprm_Estado),
                new SqlParameter("@20", SqlDbType.VarChar, 100) { Direction = ParameterDirection.Output }        
                };

                context.ExecuteStoreCommand("exec pa_Ins_SociedadRegistro @_csoc_codigo=@0, @_csoc_Domicilio=@1, @_csoc_NumFicha=@2, @_dsoc_FecInscripcion=@3, @_dsoc_FecIniOperacion=@4, @_nsoc_MonCapitalInicial=@5, @_csoc_Email=@6, @_csoc_PaginaWeb=@7, @_csoc_Telefonos=@8, @_csoc_Fax=@9, @_nsoc_MonAutovaluo=@10, @_cprm_TipDomicilio=@11, @_cdis_CodDom=@12, @_cpro_CodDom=@13, @_cdep_CodDom=@14, @_cpro_CodCons=@15, @_cdep_CodCons=@16, @_csoc_usucre=@17, @_csoc_usumod=@18, @_cprm_Estado=@19, @_ResultMsj=@20 output", parameters);

                cRpta = (String)parameters[20].Value;
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return cRpta;
        }

        public String Actualizar_SociedadRegistro(Soa_Sociedad_Registro oSoc)
        {
            String cRpta = "0@";
            try
            {
                var parameters = new[] { 
                new SqlParameter("@0", oSoc.csoc_codigo), 
                new SqlParameter("@1", oSoc.csoc_Domicilio), 
                new SqlParameter("@2", oSoc.csoc_NumFicha ), 
                new SqlParameter("@3", oSoc.dsoc_FecInscripcion), 
                new SqlParameter("@4", oSoc.dsoc_FecIniOperacion), 
                new SqlParameter("@5", oSoc.nsoc_MonCapitalInicial), 
                new SqlParameter("@6", oSoc.csoc_Email), 
                new SqlParameter("@7", oSoc.csoc_PaginaWeb ), 
                new SqlParameter("@8", oSoc.csoc_Telefonos), 
                new SqlParameter("@9", oSoc.csoc_Fax), 
                new SqlParameter("@10", oSoc.nsoc_MonAutovaluo), 
                new SqlParameter("@11", oSoc.cprm_TipDomicilio), 
                new SqlParameter("@12", oSoc.cdis_CodDom), 
                new SqlParameter("@13", oSoc.cpro_CodDom ), 
                new SqlParameter("@14", oSoc.cdep_CodDom), 
                new SqlParameter("@15", oSoc.cpro_CodCons), 
                new SqlParameter("@16", oSoc.cdep_CodCons), 
                new SqlParameter("@17", oSoc.csoc_usumod),
                new SqlParameter("@18", oSoc.csoc_nroreg), 
                new SqlParameter("@19", SqlDbType.VarChar, 100) { Direction = ParameterDirection.Output }        
                };

                context.ExecuteStoreCommand("exec pa_upd_SociedadRegistro @_csoc_codigo=@0, @_csoc_Domicilio=@1, @_csoc_NumFicha=@2, @_dsoc_FecInscripcion=@3, @_dsoc_FecIniOperacion=@4, @_nsoc_MonCapitalInicial=@5, @_csoc_Email=@6, @_csoc_PaginaWeb=@7, @_csoc_Telefonos=@8, @_csoc_Fax=@9, @_nsoc_MonAutovaluo=@10, @_cprm_TipDomicilio=@11, @_cdis_CodDom=@12, @_cpro_CodDom=@13, @_cdep_CodDom=@14, @_cpro_CodCons=@15, @_cdep_CodCons=@16, @_csoc_usumod=@17, @_csoc_nroreg=@18, @_ResultMsj=@19 output", parameters);

                cRpta = (String)parameters[19].Value;
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return cRpta;
        }

        public List<Soa_Representante_Sociedad> Listar_RepresentantesSociedad(String pCodSoa, int pNroReg)
        {
            List<Soa_Representante_Sociedad> lstRep = new List<Soa_Representante_Sociedad>();
            var beSoc = from soc in context.Soa_Representante_Sociedad
                        where soc.csoc_codigo == pCodSoa && soc.csoc_nroreg == pNroReg
                        orderby soc.crep_Codigo
                        select soc;
            if (beSoc.Count() > 0)
            {
                lstRep = (List<Soa_Representante_Sociedad>)beSoc.ToList();
            }
            else
            {
                Soa_Representante_Sociedad repSoa = new Soa_Representante_Sociedad();
                for (int i = 1; i <= 6; i++)
                {
                    repSoa = new Soa_Representante_Sociedad();
                    repSoa.crep_Codigo = i.ToString();
                    lstRep.Add(repSoa);
                }
            }
            return lstRep;
        }

        public List<Soa_Experiencia_Sociedad> Listar_ExperienciaSociedad(String pCodSoa, int pNroReg)
        {
            List<Soa_Experiencia_Sociedad> lstRep = new List<Soa_Experiencia_Sociedad>();
            var beSoc = from soc in context.Soa_Experiencia_Sociedad
                        where soc.csoc_codigo == pCodSoa && soc.csoc_nroreg == pNroReg
                        orderby soc.cexp_Codigo
                        select soc;
            if (beSoc.Count() > 0)
            {
                lstRep = (List<Soa_Experiencia_Sociedad>)beSoc.ToList();
            }
            else
            {
                Soa_Experiencia_Sociedad repSoa = new Soa_Experiencia_Sociedad();
                for (int i = 1; i <= 6; i++)
                {
                    repSoa = new Soa_Experiencia_Sociedad();
                    repSoa.cexp_Codigo = i.ToString();
                    lstRep.Add(repSoa);
                }
            }
            return lstRep;
        }

        public String Insertar_SociedadRepLegal(Soa_Representante_Sociedad oSoc)
        {
            String cRpta = "0@";
            try
            {
                var parameters = new[] { 
                new SqlParameter("@0", oSoc.csoc_codigo), 
                new SqlParameter("@1", oSoc.csoc_nroreg), 
                new SqlParameter("@2", oSoc.cprm_TipRepres ), 
                new SqlParameter("@3", oSoc.cprm_TipDocum), 
                new SqlParameter("@4", oSoc.crep_NumDocum), 
                new SqlParameter("@5", oSoc.crep_RUC), 
                new SqlParameter("@6", oSoc.crep_ApePaterno), 
                new SqlParameter("@7", oSoc.crep_ApeMaterno ), 
                new SqlParameter("@8", oSoc.crep_Nombres), 
                new SqlParameter("@9", oSoc.crep_UsuCre), 
                new SqlParameter("@10", SqlDbType.VarChar, 100) { Direction = ParameterDirection.Output }        
                };

                context.ExecuteStoreCommand("exec pa_Ins_SociedadRepLegal @_csoc_codigo=@0 ,@_csoc_nroreg=@1 ,@_cprm_TipRepres=@2 ,@_cprm_TipDocum=@3 ,@_crep_NumDocum=@4 ,@_crep_RUC=@5 ,@_crep_ApePaterno=@6 ,@_crep_ApeMaterno=@7 ,@_crep_Nombres=@8 ,@_crep_UsuCre=@9, @_ResultMsj=@10 output", parameters);

                cRpta = (String)parameters[10].Value;
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return cRpta;
        }

        public String Actualizar_SociedadRepLegal(Soa_Representante_Sociedad oSoc)
        {
            String cRpta = "0@";
            try
            {
                var parameters = new[] { 
                new SqlParameter("@0", oSoc.csoc_codigo), 
                new SqlParameter("@1", oSoc.csoc_nroreg), 
                new SqlParameter("@2", oSoc.cprm_TipRepres ), 
                new SqlParameter("@3", oSoc.cprm_TipDocum), 
                new SqlParameter("@4", oSoc.crep_NumDocum), 
                new SqlParameter("@5", oSoc.crep_RUC), 
                new SqlParameter("@6", oSoc.crep_ApePaterno), 
                new SqlParameter("@7", oSoc.crep_ApeMaterno ), 
                new SqlParameter("@8", oSoc.crep_Nombres), 
                new SqlParameter("@9", oSoc.crep_UsuCre), 
                new SqlParameter("@10", oSoc.crep_Codigo), 
                new SqlParameter("@11", SqlDbType.VarChar, 100) { Direction = ParameterDirection.Output }        
                };

                context.ExecuteStoreCommand("exec pa_Upd_SociedadRepLegal @_csoc_codigo=@0 ,@_csoc_nroreg=@1 ,@_cprm_TipRepres=@2 ,@_cprm_TipDocum=@3 ,@_crep_NumDocum=@4 ,@_crep_RUC=@5 ,@_crep_ApePaterno=@6 ,@_crep_ApeMaterno=@7 ,@_crep_Nombres=@8 ,@_crep_UsuCre=@9, @_crep_Codigo=@10, @_ResultMsj=@11 output", parameters);

                cRpta = (String)parameters[11].Value;
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return cRpta;
        }

    }
}
